using System;
using NUnit.Framework;
using dnAnalytics.Math;
using dnAnalytics.UnitTests;
namespace dnAnalytics.UnitTests.Math
{
	[TestFixture]
	[Category("Managed")]
	public class ComplexMath_PowTest
	{
		[Test]
		public void Pow()
		{
			Complex a, b; 
			a = new Complex(1.19209289550780998537e-7,1.19209289550780998537e-7);
			b = new Complex(1.19209289550780998537e-7,1.19209289550780998537e-7);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(9.99998047207974718744e-1,-1.76553541154378695012e-6), 2e-009);
			a = new Complex(0.0,1.19209289550780998537e-7);
			b = new Complex(0.0,-1.19209289550780998537e-7);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(1.00000018725172576491,1.90048076369011843105e-6), 2e-009);
			a = new Complex(0.0,-1.19209289550780998537e-7);
			b = new Complex(0.0,5.0e-1);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(-2.56488189382693049636e-1,-2.17823120666116144959), 2e-009);
			a = new Complex(0.0,5.0e-1);
			b = new Complex(0.0,-5.0e-1);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(2.06287223508090495171,7.45007062179724087859e-1), 2e-009);
			a = new Complex(0.0,-5.0e-1);
			b = new Complex(0.0,1.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(3.70040633557002510874,-3.07370876701949232239), 2e-009);
			a = new Complex(0.0,2.0);
			b = new Complex(0.0,-2.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(4.24532146387429353891,-2.27479427903521192648e1), 2e-009);
			a = new Complex(0.0,-8.388608e6);
			b = new Complex(1.19209289550780998537e-7,0.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(1.00000190048219620166,-1.87253870018168043834e-7), 2e-009);
			a = new Complex(-1.19209289550780998537e-7,0.0);
			b = new Complex(1.19209289550780998537e-7,1.19209289550780998537e-7);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(9.9999772501398737524e-1,-1.52596990796029252066e-6), 2e-009);
			a = new Complex(1.19209289550780998537e-7,1.19209289550780998537e-7);
			b = new Complex(1.19209289550780998537e-7,-1.19209289550780998537e-7);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(9.99998234460792594997e-1,1.95278892568933630108e-6), 2e-009);
			a = new Complex(1.19209289550780998537e-7,-1.19209289550780998537e-7);
			b = new Complex(-1.19209289550780998537e-7,1.19209289550780998537e-7);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(1.00000195279272155185,-1.76554230700542567173e-6), 2e-009);
			a = new Complex(-1.19209289550780998537e-7,1.19209289550780998537e-7);
			b = new Complex(-1.19209289550780998537e-7,-1.19209289550780998537e-7);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(1.0000021400469319694,1.5782887227319822572e-6), 2e-009);
			a = new Complex(-1.19209289550780998537e-7,-1.19209289550780998537e-7);
			b = new Complex(1.19209289550780998537e-7,5.0e-1);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(1.82048207798306990457e-1,-3.24307620835855028074), 2e-009);
			a = new Complex(1.19209289550780998537e-7,5.0e-1);
			b = new Complex(1.19209289550780998537e-7,-5.0e-1);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(2.06287167920797422826,7.45007298088250109031e-1), 2e-009);
			a = new Complex(1.19209289550780998537e-7,-5.0e-1);
			b = new Complex(-1.19209289550780998537e-7,5.0e-1);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(2.06287229912678381546,-7.45006648647539965524e-1), 2e-009);
			a = new Complex(-1.19209289550780998537e-7,5.0e-1);
			b = new Complex(-1.19209289550780998537e-7,-5.0e-1);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(2.06287279095396722032,7.45006826270870470906e-1), 2e-009);
			a = new Complex(-1.19209289550780998537e-7,-5.0e-1);
			b = new Complex(1.19209289550780998537e-7,1.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(3.70040633648973576176,-3.0737099387836770671), 2e-009);
			a = new Complex(1.19209289550780998537e-7,1.0);
			b = new Complex(1.19209289550780998537e-7,-1.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(4.81047680751171051403,9.00778584383872064434e-7), 2e-009);
			a = new Complex(1.19209289550780998537e-7,-1.0);
			b = new Complex(-1.19209289550780998537e-7,1.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(4.81047680751171051401,9.00778652744859086829e-7), 2e-009);
			a = new Complex(-1.19209289550780998537e-7,1.0);
			b = new Complex(-1.19209289550780998537e-7,-1.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(4.81047795441889248392,-9.00779004229257802805e-7), 2e-009);
			a = new Complex(-1.19209289550780998537e-7,-1.0);
			b = new Complex(1.19209289550780998537e-7,2.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(2.31406981499505779357e1,-4.33317704837467381982e-6), 2e-009);
			a = new Complex(1.19209289550780998537e-7,2.0);
			b = new Complex(1.19209289550780998537e-7,-2.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(4.24532556821343719351,-2.27479411632873741316e1), 2e-009);
			a = new Complex(1.19209289550780998537e-7,-2.0);
			b = new Complex(-1.19209289550780998537e-7,2.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(4.24531634737212140514,2.27479389938842465821e1), 2e-009);
			a = new Complex(-1.19209289550780998537e-7,2.0);
			b = new Complex(-1.19209289550780998537e-7,-2.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(4.24531735953421017366,-2.2747944417416245858e1), 2e-009);
			a = new Complex(-1.19209289550780998537e-7,-8.388608e6);
			b = new Complex(5.0e-1,0.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(2.04799999999998544808e3,-2.04800000000001455192e3), 2e-009);
			a = new Complex(-5.0e-1,0.0);
			b = new Complex(5.0e-1,1.19209289550780998537e-7);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(5.84279165479569722374e-8,7.07106516370135390697e-1), 2e-009);
			a = new Complex(5.0e-1,1.19209289550780998537e-7);
			b = new Complex(5.0e-1,-1.19209289550780998537e-7);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(7.07106781186563266789e-1,1.42721635451415540181e-7), 2e-009);
			a = new Complex(5.0e-1,-1.19209289550780998537e-7);
			b = new Complex(-5.0e-1,1.19209289550780998537e-7);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(1.41421356237311419982,5.17315171843250286477e-8), 2e-009);
			a = new Complex(-5.0e-1,1.19209289550780998537e-7);
			b = new Complex(-5.0e-1,-1.19209289550780998537e-7);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(2.85443377803337891375e-7,-1.41421409200602374123), 2e-009);
			a = new Complex(-5.0e-1,-1.19209289550780998537e-7);
			b = new Complex(5.0e-1,5.0e-1);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(-1.15541841519997588982,-3.19927364312925565319), 2e-009);
			a = new Complex(5.0e-1,5.0e-1);
			b = new Complex(5.0e-1,-5.0e-1);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(1.0511459897104246146,6.67813825278960257194e-1), 2e-009);
			a = new Complex(5.0e-1,-5.0e-1);
			b = new Complex(-5.0e-1,5.0e-1);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(1.7189598149893848718,3.8333216443146435741e-1), 2e-009);
			a = new Complex(-5.0e-1,5.0e-1);
			b = new Complex(-5.0e-1,-5.0e-1);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(2.07140248058937952289,-3.26040930589933104771), 2e-009);
			a = new Complex(-5.0e-1,-5.0e-1);
			b = new Complex(5.0e-1,1.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(4.09083312268613016524e-1,-8.86262979484208589882), 2e-009);
			a = new Complex(5.0e-1,1.0);
			b = new Complex(5.0e-1,-1.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(2.89184468869136961449,1.36850553232463909129), 2e-009);
			a = new Complex(5.0e-1,-1.0);
			b = new Complex(-5.0e-1,1.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(2.25154230133625911883,1.76607353802324005508), 2e-009);
			a = new Complex(-5.0e-1,1.0);
			b = new Complex(-5.0e-1,-1.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(3.09393187799682543573,-6.53791326174600512079), 2e-009);
			a = new Complex(-5.0e-1,-1.0);
			b = new Complex(5.0e-1,2.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(4.33516224515547153119e1,-4.41108378192366579843e1), 2e-009);
			a = new Complex(5.0e-1,2.0);
			b = new Complex(5.0e-1,-2.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(1.44136773287116337377e1,-1.43737200415563654774e1), 2e-009);
			a = new Complex(5.0e-1,-2.0);
			b = new Complex(-5.0e-1,2.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(-5.06837680441339154964,8.47393286545916475625), 2e-009);
			a = new Complex(-5.0e-1,2.0);
			b = new Complex(-5.0e-1,-2.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(-1.85757451058788304534e1,-1.86273835390174169738e1), 2e-009);
			a = new Complex(-5.0e-1,-8.388608e6);
			b = new Complex(1.0,0.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(-5.0e-1,-8.388608e6), 2e-009);
			a = new Complex(1.0,1.19209289550780998537e-7);
			b = new Complex(1.0,-1.19209289550780998537e-7);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(1.00000000000001421085,1.1920928955078184557e-7), 2e-009);
			a = new Complex(1.0,-1.19209289550780998537e-7);
			b = new Complex(-1.0,1.19209289550780998537e-7);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(1.0,1.1920928955078184557e-7), 2e-009);
			a = new Complex(-1.0,1.19209289550780998537e-7);
			b = new Complex(-1.0,-1.19209289550780998537e-7);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(-1.00000037450706999844,-1.19209334195501897762e-7), 2e-009);
			a = new Complex(-1.0,-1.19209289550780998537e-7);
			b = new Complex(1.0,5.0e-1);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(-4.81047709423856470811,-5.73453573894732446896e-7), 2e-009);
			a = new Complex(1.0,5.0e-1);
			b = new Complex(1.0,-5.0e-1);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(1.2940879611878455755,5.59164217163205818809e-1), 2e-009);
			a = new Complex(1.0,-5.0e-1);
			b = new Complex(-1.0,5.0e-1);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(9.79027320354617600278e-1,5.59817470921882375292e-1), 2e-009);
			a = new Complex(-1.0,5.0e-1);
			b = new Complex(-1.0,-5.0e-1);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(-3.13243712712293303335,-1.35349899429781302247), 2e-009);
			a = new Complex(-1.0,-5.0e-1);
			b = new Complex(1.0,1.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(-1.36543645854238022036e1,-8.85290363761184112757), 2e-009);
			a = new Complex(1.0,1.0);
			b = new Complex(1.0,-1.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(2.80787929726062903957,1.31786517290118086385), 2e-009);
			a = new Complex(1.0,-1.0);
			b = new Complex(-1.0,1.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(6.58932586450590431924e-1,1.40393964863031451978), 2e-009);
			a = new Complex(-1.0,1.0);
			b = new Complex(-1.0,-1.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(-6.75361992397657144369,-3.16978030270156142359), 2e-009);
			a = new Complex(-1.0,-1.0);
			b = new Complex(1.0,2.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(-1.450221580753799496e1,-1.5675771544809202808e2), 2e-009);
			a = new Complex(1.0,2.0);
			b = new Complex(1.0,-2.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(1.79426068168389985952e1,-9.85549019536299976886), 2e-009);
			a = new Complex(1.0,-2.0);
			b = new Complex(-1.0,2.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(-3.72999124927875979445,1.68815826725067980298), 2e-009);
			a = new Complex(-1.0,2.0);
			b = new Complex(-1.0,-2.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(-2.29273535787762074742e1,1.25935049855290639346e1), 2e-009);
			a = new Complex(-1.0,-8.388608e6);
			b = new Complex(2.0,0.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(-7.0368744177663e13,1.6777216e7), 2e-009);
			a = new Complex(-2.0,0.0);
			b = new Complex(2.0,1.19209289550780998537e-7);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(3.99999850197215368613,3.30518208013296559626e-7), 2e-009);
			a = new Complex(2.0,1.19209289550780998537e-7);
			b = new Complex(2.0,-1.19209289550780998537e-7);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(4.00000000000003995641,1.46318826408412115457e-7), 2e-009);
			a = new Complex(2.0,-1.19209289550780998537e-7);
			b = new Complex(-2.0,1.19209289550780998537e-7);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(2.49999999999995795812e-1,5.04597181248646035514e-8), 2e-009);
			a = new Complex(-2.0,1.19209289550780998537e-7);
			b = new Complex(-2.0,-1.19209289550780998537e-7);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(2.50000093626771773244e-1,9.1449300753655074337e-9), 2e-009);
			a = new Complex(-2.0,-1.19209289550780998537e-7);
			b = new Complex(2.0,5.0e-1);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(1.80978247631836073343e1,6.53603847119075424092), 2e-009);
			a = new Complex(2.0,5.0e-1);
			b = new Complex(2.0,-5.0e-1);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(4.7643662627285056981,6.14293657645256404233e-1), 2e-009);
			a = new Complex(2.0,-5.0e-1);
			b = new Complex(-2.0,5.0e-1);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(1.75188217791290995924e-1,2.00102321413576003441e-1), 2e-009);
			a = new Complex(-2.0,5.0e-1);
			b = new Complex(-2.0,-5.0e-1);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(9.93167674872000831132e-1,1.28054093662975414474e-1), 2e-009);
			a = new Complex(-2.0,-5.0e-1);
			b = new Complex(2.0,1.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(2.69288421203058133997e1,7.21152386692625137958e1), 2e-009);
			a = new Complex(2.0,1.0);
			b = new Complex(2.0,-1.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(7.88966885164614827205,9.71958872072081690308e-1), 2e-009);
			a = new Complex(2.0,-1.0);
			b = new Complex(-2.0,1.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(-5.10410704508689237391e-2,3.13849223270419408578e-1), 2e-009);
			a = new Complex(-2.0,1.0);
			b = new Complex(-2.0,-1.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(2.88918880975100741709,3.5593036279880811871e-1), 2e-009);
			a = new Complex(-2.0,-1.0);
			b = new Complex(2.0,2.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(-8.71330088091811080422e2,6.02345829402297724033e2), 2e-009);
			a = new Complex(2.0,2.0);
			b = new Complex(2.0,-2.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(3.36119631223856976371e1,-1.87414050582462231776e1), 2e-009);
			a = new Complex(2.0,-2.0);
			b = new Complex(-2.0,2.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(-5.25186923787276525579e-1,-2.9283445403509723715e-1), 2e-009);
			a = new Complex(-2.0,2.0);
			b = new Complex(-2.0,-2.0);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(1.21531891781162373227e1,-6.77639209311391411895), 2e-009);
			a = new Complex(-8.388608e6,-8.388608e6);
			b = new Complex(0.0,1.19209289550780998537e-7);
			TestHelper.TestRelativeError(ComplexMath.Pow(a,b), new Complex(1.00000028087842538133,1.94179574470475151246e-6), 2e-009);
		}
	}
}
